The rapid growth of the Internet and Internet based applications has created a multitude of benefits for individuals, businesses, governments, schools, and society in general. Several years ago the Internet was primarily used by individuals to ‘surf the web’ using a web browser software application component. In this situation, the individual's computer is sometimes referred to as a client. The client requests data, images, or other information from another machine, sometimes referred to as a server, via the Internet. This client/server architecture may be thought of in terms of a requesting machine (e.g., the client) and a supplying machine (e.g., the server), which may include a database and a database management system (DBMS) software application. The client web browser gains access to the Internet through a network communications protocol, which includes one or more layers, in order to request and obtain information from the server database software.
The browser typically interfaces with a hypertext transport protocol (HTTP) software component, which provides for sending requests and receiving responses in a first layer. The HTTP software component is sometimes referred to as the HTTP stack. The HTTP stack protocol is used to establish a connection with a web server and to transmit hypertext markup language (html) pages or other data to the client browser. To do this, the HTTP stack interfaces with a transport layer, such as the transmission control protocol (TCP). The TCP layer interfaces with a network layer software component, such as the Internet protocol (IP) layer. The TCP/IP communications protocol has become the standard for most Internet communication, wherein the TCP layer or stack provides transport functions to ensure the total amount of bytes in a transmitted data packet are properly received, and the IP layer provides a routing mechanism. In the IP protocol, messages include addresses for both the destination station or machine, and the destination network (e.g., an IP address), thus rendering the IP protocol particularly applicable to the Internet.
On the server machine, the server software application (e.g., a database management system software component) receives requests from one or more such clients via a layered network architecture including a server side IP layer, a server TCP layer, and a server side HTTP stack. In the past, significant attention was focused on improving the throughput capability of server side software implementations of the HTTP layer (e.g., the server side HTTP stack), such as by the employment of multi-tasking techniques. This is because such servers are commonly subjected to hundreds and even thousands of client requests within a short period of time.
Thus, many server side HTTP stack software implementations provide for multithreading, which allows two or more streams of execution (threads) to run concurrently within a single program (e.g., to service multiple client requests). Multithreading may be employed in a single processor server machine, and/or in a multiprocessing environment wherein a plurality of processors may service individual threads. For example, individual client requests may be processed by corresponding threads, thereby increasing the request handling capacity of the server. In addition, some server side HTTP stack implementations include methods and software components for facilitating efficient usage of such threads, for example, completion ports and the like.
While improvements have heretofore been made in the server side HTTP stack implementation to support the large number of requests typically received by such servers, little attention has been thus far paid to the client side HTTP stack implementation. The typical web browser application on the client side is usually asked to obtain information from a server in relatively small chunks (e.g., one html page at a time). In addition, the web browser typically only generates a new request when the client user performs a user interface command, such as by selecting a new page to view. For example, a user may obtain a page of information, and study the page for several seconds or even minutes before initiating a request for another page. Consequently, there has thus far been no incentive to improve the request throughput capacity of client side HTTP stack implementations.
In recent years, however, advanced software applications have been developed and installed, which provide businesses and other institutions with Internet based features and capabilities requiring improved processing capabilities on the client machine. For instance, a client machine may include an application which generates hundreds or even thousands of requests in a very short period of time, which need to be processed in a timely fashion. Thus, there is a need for improved methods and systems for implementing a client side HTTP stack in a computer system.